/*
 * @Date: 2024-08-27 15:19:15
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2025-04-10 13:36:26
 * @Description: 业务方法混入的定义
 */

export const busiMethods = {
  /**
   * 获取传递的业务数据中的用户信息
   * 
   * @returns {Object}
   */
  getUserInfo () {
    return this.busiConfig.userInfo || {};
  },
  /**
   * 获取当前用户的本级区划编码
   * 
   * @returns {String} 区划编码
   */
  getBjAdCode () {
    return this.busiConfig.userInfo?.adBjCode || '';
  },
  /**
   * 获取传递的业务数据配置
   * 
   * @returns {Object} 业务数据配置 {
   *  userInfo: 用户信息,
   *  slotsData: 插槽数据,
   *  dataHouse: 表单数据,
   *  slotDataHouse: 插槽数据（冗余）
   * }
   */
  getBusiConfig() {
    return this.busiConfig || {
      hooks: {}, userInfo: {}, slotsData: {}, dataHouse: {}, slotDataHouse: {}
    }
  },
  /**
   * 获取当前年
   * 
   * @returns {Number|String}
   */
  getCurrentYear() {
    return new Date().getFullYear()
  },
  /**
   * 获取当前月
   * 
   * @returns {Number|String}
   */
  getCurrentMonth() {
    return new Date().getMonth() + 1
  },
  /**
   * 获取当前时间
   * 
   * @param {String} format 时间格式
   * @returns {String}
   */
  getFormattedTime (format = 'yyyy-MM-dd') {
    const date = new Date();
    // 时间组件提取（本地时区）
    const components = {
      yyyy: date.getFullYear(),
      MM: String(date.getMonth() + 1).padStart(2, '0'),
      dd: String(date.getDate()).padStart(2, '0'),
      HH: String(date.getHours()).padStart(2, '0'),         // 24小时制
      hh: String(date.getHours() % 12 || 12).padStart(2, '0'), // 12小时制
      mm: String(date.getMinutes()).padStart(2, '0'),
      ss: String(date.getSeconds()).padStart(2, '0'),
      a: date.getHours() >= 12 ? 'PM' : 'AM'               // AM/PM
    };

    // 格式符替换逻辑
    return format.replace(/(yyyy|MM|dd|HH|hh|mm|ss|a)/g, match => {
      return components[match] || match;
    });
  },
  /**
   * 表单渲染的时间出发
   * 
   * @param {String} name 定义事件的名称
   * @param {Array} params 传递参数的信息
   * @param {Boolean} includeThis 是否包含this对象
   */
  formRenderDispatchEmit (name, params=[], includeThis=false) {
    if (includeThis) { params = [ ...params, this ] }
    this.dispatch('VFormRender', name, params);
  },
}
export default {
  inject: [
    'busiConfig'
  ],
  methods: busiMethods
}